package leetcode_141_160;

import java.util.Stack;

public class reverseWords_151 {
    /**
     * 反转字符串中的单词
     * 8ms
     */
    public String reverseWords(String s) {
        Stack<StringBuilder>words=new Stack<>();
        for (int i=0;i<s.length();){
            StringBuilder word=new StringBuilder();
            while(i<s.length() && s.charAt(i)==' ')  //跳过空格
                i++;
            while(i<s.length() && s.charAt(i)!=' ')
                word.append(s.charAt(i++));
            if(word.length()!=0)
                words.push(word);
        }
        StringBuilder ans=new StringBuilder();
        while(words.size()>0){
            ans.append(words.pop()+" ");
        }
        ans.delete(ans.length()-1,ans.length());
        return ans.toString();
    }


    /**
     * 高解
     * 直接找分隔符即可，将对应单词拆下来，我还以为这样substring会很耗时
     * 2ms
     */
    public String reverseWords2(String s) {
        char[] sArr = s.toCharArray();
        StringBuilder ans = new StringBuilder();
        // 倒着遍历
        for(int i=sArr.length-1;i>=0;i--){
            // 找到单词的结束位置
            while(i>=0 && sArr[i]==' '){
                --i;
            }
            int end = i;
            if(i<0){
                break;
            }
            // 找到单词的起点
            while(i>=0 && sArr[i]!=' '){
                --i;
            }
            ans.append(" ").append(s.substring(i+1,end+1));
        }
        return ans.toString().trim();
    }
}
